![Amazon Chime SDKのビデオ会議の録画を試してみた](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-chime.png)
Amazon Chime SDKのビデオ会議の録画を試してみた
こんにちは、CX事業本部の若槻です。
Amazon Chime SDKでは、会議の映像を録画する機能は標準ではありません(2020/11現在)が、AWSの機能を組み合わせて録画機能を実現するデモがAWS公式で紹介されています。
今回は、AWS公式のデモを参考にAmazon Chime SDKのビデオ会議の録画機能を実装してみました。
アウトプット
会議画面を録画して動画ファイルをS3バケットに保存する「録画機能」を開始および終了するRest APIを作成します。会議画面の表示はボットユーザーが参加者として会議に参加することにより行います。
構成は次のようになります。ボットユーザーの会議参加、録画はECSタスク上で行います。
画像はHow to Enable Client-Side Recording Using the Amazon Chime SDK | Business Productivityより引用
構成図にはありませんが、ECSクラスターに必要となるAmazon VPC、subnets、security group、auto-scaling groupもスタックデプロイ時に作成されます。
Rest APIの実行は、今回は会議画面からでなくPostmanのクライアントアプリから実行します。
録画対象の会議が実施される会議アプリ自体は下記で既に作成したデモアプリを使用します。
やってみた
Amazon ECRにリポジトリを作成
次のコマンドを実行してAmazon ECRにリポジトリを作成します。
aws ecr create-repository --repository-name <repository-name>
作成されたリポジトリのrepositoryUri
を控えます。
% aws ecr create-repository --repository-name amazon-chime-sdk-recording-demo { "repository": { "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxxxxxxxxxx:repository/amazon-chime-sdk-recording-demo", "registryId": "xxxxxxxxxxxx", "repositoryName": "amazon-chime-sdk-recording-demo", "repositoryUri": "xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo", "createdAt": "2020-11-05T17:16:02+09:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false } } }
コンソールを見るとECRにリポジトリが作成されています。
録画デモのソースコードのダウンロード
% git clone https://github.com/aws-samples/amazon-chime-sdk-recording-demo.git % cd amazon-chime-sdk-recording-demo
Dockerイメージのビルド、ECRリポジトリへのプッシュ
次のコマンドを実行してDockerイメージをビルドして、ECRリポジトリへプッシュします。
make ECR_REPO_URI=<repositoryUri>
実行してしばらくすると、スクリプトが完了してプッシュされたイメージのImage URIが表示されるので控えます。
% make ECR_REPO_URI=xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo ... latest: digest: sha256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy size: 1576 Image URI in ECR repository: xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo:latest
コンソールを見るとECRのリポジトリにイメージがプッシュされています。
スタックのデプロイ
次のコマンドを実行してAmazon Chime SDKの録画機能のスタックをデプロイします。
node ./deploy.js -b <my-bucket> -s <my-stack> -i <my-docker-image-uri> -r <region>
デプロイが成功するとAPI GatewayのエンドポイントURLが表示されるので控えます。
% node ./deploy.js -b recording-demo-cnf-deploy-bucket -s recording-demo-cnf-stack -i xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-chime-sdk-recording-demo:latest -r ap-northeast-1 ... Successfully created/updated stack - recording-demo-cnf-stack in ap-northeast-1 Recording API Gateway invoke URL: https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/recording Adding ECS capacity provider and enabling managed scaling & termination protection Deployment complete
API認証用IAMユーザーの作成
録画機能のAPI実行時の認証に使用する管理者権限を持ったIAMユーザーを作成します。
% aws iam create-user --user-name chime-recording-user % aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --user-name chime-recording-user
IAMユーザーのアクセスキーを作成し、アクセスキーIDとシークレットを控えます。
$ aws iam create-access-key --user-name chime-recording-user { "AccessKey": { "UserName": "chime-recording-user", "AccessKeyId": "XXXXXXXXXXXXXXXXX", "Status": "Active", "SecretAccessKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "CreateDate": "2020-11-05T13:45:43+00:00" } }
Amazon Chime SDKの会議の開始
前回の記事で実装したAmazon Chime SDKのデモアプリで、録画対象とするWeb会議を開始します。
デモアプリが未実装の場合は前回の記事または以下を参考に実装してください。
開始したAmazon Chime SDKの会議のURLhttps://xxxxxxx.execute-api.us-east-1.amazonaws.com/Prod/v2/m=<meetingTitle>
を控えます。
録画の開始
先程作成したAPI GatewayのRest APIを実行してAmazon Chime SDKの会議の録画を開始します。
Rest APIの実行はPostmanのクライアントアプリを使用します。未導入の場合はここからPostmanのアプリをダウンロード、インストールします。
メソッドはPOST
、URLはスタックデプロイ時に控えたエンドポイントURLを指定します。[Authorization]タブで、[TYPE]はAWS Signature
、[AccessKey]と[SecretKey]は先程作成したアクセスキーの値、[AWS Region]はスタックをデプロイしたリージョンを指定します。
[Params]タブで、クエリパラメータとして[recordingAction]はstart
、[meetingURL]はURLエンコードしたAmazon Chime SDKの会議のURLを指定します。[Send]をクリックしてPOSTリクエストを実行すると、ECRタスクARNがレスポンスされ、会議の録画が開始されます。
会議の参加者一覧を見ると、録画用のBotユーザー「<< Meeting Recorder >>」が会議に参加者として参加しています。
録画の終了、録画ファイルの保存
先程Postmanでの録画開始時のリクエストのクエリパラメータを変更します。[Params]タブで、[recordingAction]はstop
、[taskId]は録画開始時のリクエストでレスポンスされたECSタスクのIDを指定します。[Send]をクリックしてPOSTリクエストを実行すると、ECRタスクの情報がレスポンスされ、会議の録画が終了します。
会議の参加者一覧を見ると、録画用のBotユーザーが退出していなくなっています。
録画ファイルはS3バケットchime-meeting-sdk-<aws-account-id>-<region>-recordings
のYYYY/MM/DD/HH
キーにmp4ファイルとして保存されます。
ダウンロードしたmp4を再生してみるとちゃんと会議の画面が音声付きで録画できています。
ただし、録画画面上だと参加者名などの日本語文字が文字化けしてしまっているため、この部分は改善が要りそうです。
おわりに
AWS公式のデモを参考にAmazon Chime SDKのビデオ会議の録画機能を実装してみました。
会議の録画機能は標準機能としてあるに越したことはありませんが、AWSの機能をフル活用すれば標準機能と遜色ない機能として実装できるのは良いですね。
参考
以上